package com.tulele.vtool.mapper;

import com.tulele.vtool.model.LookArticleInfo;
import com.tulele.vtool.model.combinedEntity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

@Component(value = "lookArticleInfoMapper")
public interface LookArticleInfoMapper {

    /**
     * 添加文章查看信息
     * @param lookArticleInfo
     * @return
     */
    int addLookArticleInfo(LookArticleInfo lookArticleInfo);

    /**
     * 更新文章查看信息
     * @param lookArticleInfo
     * @return
     */
    int updateLookArticleInfo(LookArticleInfo lookArticleInfo);

    /**
     * 查看用户文章总查看次数统计信息
     * @param userId
     * @return
     */
    LookArticleStatisEntity queryTotalLookArticleStatisInfo(Integer userId);

    /**
     * 查看用户文章当天查看次数统计信息
     * @param userId
     * @return
     */
    LookArticleStatisEntity queryTodayLookArticleStatisInfo(Integer userId);

    /**
     * 查询用户查看文章的统计信息
     * @param lookArticleInfo
     * @return
     */
    CombinedLookArticleUserInfo queryUserLookArticleStatisInfo(LookArticleInfo lookArticleInfo);

    /**
     * 查询用户查看他人文章的信息
     * @param lookArticleInfo
     * @return
     */
    LookArticleInfo queryLookOtherArticleInfo(LookArticleInfo lookArticleInfo);

    //查询用户最近看的品牌文章信息
    LookArticleInfo getUserOneBrandId(@Param("gzhCode") String gzhCode,@Param("userId")Integer userId);

    /**
     * 查询查看用户文章的用户和查看次数统计
     * @param userId
     * @return
     */
    List<LookUserArticleStatisInfo> queryLookUserArticleStatisInfo(@Param("userId")Integer userId, @Param("recordSize")Integer recordSize);

    /**
     * 查询查看了文章的用户信息
     * @param userId
     * @return
     */
    List<CombinedLookArticleUserInfo> queryLookArticleUserInfo(Integer userId);

    /**
     * 删除模拟访问用户
     * @param virtualUserIds
     * @return
     */
    int deleteVirtualVisitUsers(@Param("virtualUserIds")List<String> virtualUserIds, @Param("userId")Integer userId);

    Integer returnLookArticleId(@Param("id") Integer id);

    /**
     * 获取访客数量
     * @param userId 用户 ID
     * @return 访客数量
     */
    int getVisitorCount(Integer userId);

    /**
     * 获取本周的用户阅读数量列表
     * @param userId 用户 ID
     * @param firstDayOfWeek 本周第一天
     * @param lastDayOfWeek 本周最后一天
     * @return 本周的用户阅读数量列表
     */
    List<CombinedCustomerInfo> getCurrentWeekReadData(@Param("userId") Integer userId, @Param("firstDayOfWeek") String firstDayOfWeek, @Param("lastDayOfWeek") String lastDayOfWeek);

    /**
     * 获取本月的用户阅读数量列表
     * @param userId 用户 ID
     * @param firstDayOfMonth 本月第一天
     * @param lastDayOfMonth 本月最后一天
     * @return 本月的用户阅读数量列表
     */
    List<CombinedCustomerInfo> getCurrentMonthReadData(@Param("userId") Integer userId, @Param("firstDayOfMonth") String firstDayOfMonth, @Param("lastDayOfMonth") String lastDayOfMonth);

    /**
     * 获取本季的用户阅读数量列表
     * @param userId 用户 ID
     * @param firstDayOfSeason 本季第一天
     * @param lastDayOfSeason 本季最后一天
     * @return 本季的用户阅读数量列表
     */
    List<CombinedCustomerInfo> getCurrentSeasonReadData(@Param("userId") Integer userId, @Param("firstDayOfSeason") String firstDayOfSeason, @Param("lastDayOfSeason") String lastDayOfSeason);

    /**
     * 获取本季的用户阅读数量列表（按月份）
     * @param userId 用户 ID
     * @param firstMonthOfSeason 本季第一个月份
     * @param lastMonthOfSeason 本季最后一个月份
     * @return 本季的用户阅读数量列表（按月份）
     */
    List<CombinedCustomerYearInfo> getCurrentSeasonReadDataByMonth(@Param("userId") Integer userId, @Param("firstMonthOfSeason") Integer firstMonthOfSeason, @Param("lastMonthOfSeason") Integer lastMonthOfSeason);

    /**
     * 获取年度的用户阅读数量列表
     * @param userId 用户 ID
     * @return 年度的用户阅读数量列表
     */
    List<CombinedCustomerYearInfo> getCurrentYearReadData(Integer userId);

    /**
     * 获取本周的用户意向数量列表
     * @param userId 用户 ID
     * @param firstDayOfWeek 本周第一天
     * @param lastDayOfWeek 本周最后一天
     * @return 本周的用户意向数量列表
     */
    List<CombinedCustomerInfo> getCurrentWeekIntentionData(@Param("userId") Integer userId, @Param("firstDayOfWeek") String firstDayOfWeek, @Param("lastDayOfWeek") String lastDayOfWeek);

    /**
     * 获取本月的用户意向数量列表
     * @param userId 用户 ID
     * @param firstDayOfMonth 本月第一天
     * @param lastDayOfMonth 本月最后一天
     * @return 本月的用户意向数量列表
     */
    List<CombinedCustomerInfo> getCurrentMonthIntentionData(@Param("userId") Integer userId, @Param("firstDayOfMonth") String firstDayOfMonth, @Param("lastDayOfMonth") String lastDayOfMonth);

    /**
     * 获取本季的用户意向数量列表
     * @param userId 用户 ID
     * @param firstDayOfSeason 本季第一天
     * @param lastDayOfSeason 本季最后一天
     * @return 本季的用户意向数量列表
     */
    List<CombinedCustomerInfo> getCurrentSeasonIntentionData(@Param("userId") Integer userId, @Param("firstDayOfSeason") String firstDayOfSeason, @Param("lastDayOfSeason") String lastDayOfSeason);

    /**
     * 获取本季的用户意向数量列表（按月份）
     * @param userId 用户 ID
     * @param firstMonthOfSeason 本季第一个月份
     * @param lastMonthOfSeason 本季最后一个月份
     * @return 本季的用户意向数量列表（按月份）
     */
    List<CombinedCustomerYearInfo> getCurrentSeasonIntentionDataByMonth(@Param("userId") Integer userId, @Param("firstMonthOfSeason") Integer firstMonthOfSeason, @Param("lastMonthOfSeason") Integer lastMonthOfSeason);

    /**
     * 获取年度的用户意向数量列表
     * @param userId 用户 ID
     * @return 年度的用户意向数量列表
     */
    List<CombinedCustomerYearInfo> getCurrentYearIntentionData(Integer userId);

    /**
     * 获取文章的阅读量
     * @param articleId
     * @return
     */
    int getArticleReadCount(Integer articleId);

    /**
     * 获取文章的查看人数
     * @param articleId
     * @return
     */
    int getArticleLookCount(Integer articleId);
}